package rawwrs.dao.jpa;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import rawwrs.bean.DepartamentoDTO;
import rawwrs.bean.DistritoDTO;
import rawwrs.bean.ProvinciaDTO;
import rawwrs.entity.Departamento;
import rawwrs.entity.Distrito;
import rawwrs.entity.Provincia;
import rawwrs.util.JPAUtilSingleton;


public class UbigeoJPADAO{
	
	
@SuppressWarnings("unchecked")
public List<DepartamentoDTO> lista_departamentos(int estado){
		
		EntityManager em = JPAUtilSingleton.
		getInstance().getEmf().createEntityManager();
		List<DepartamentoDTO> lista_departamentos = new ArrayList<DepartamentoDTO>();
		 
	
		
		javax.persistence.Query query = em.createQuery("SELECT d FROM Departamento d WHERE d.estado = :estado ");

		query.setParameter("estado", estado);
		List<Departamento> l = query.getResultList();		
		
		for ( int i=0; i < l.size(); i++ ) {
			
			Departamento entidadDepartamento = (Departamento)l.get(i);	
			
			DepartamentoDTO objeto_departamento = new DepartamentoDTO();
			objeto_departamento.setIdDepartamento(entidadDepartamento.getIdDepartamento());
			objeto_departamento.setNombre(entidadDepartamento.getNombre());
			objeto_departamento.setPais_IdPais(entidadDepartamento.getPais_IdPais());
		
			lista_departamentos.add( objeto_departamento );
		}

		em.close();
		
		return lista_departamentos;
	}




@SuppressWarnings("unchecked")
public List<ProvinciaDTO> lista_provincias(String id_departamento,int estado){
		
		EntityManager em = JPAUtilSingleton.
		getInstance().getEmf().createEntityManager();
		
		List<ProvinciaDTO> lista_provincias = new ArrayList<ProvinciaDTO>();
		 
		javax.persistence.Query query = em.createQuery("SELECT p FROM Provincia p WHERE p.estado = :estado and p.departamento_idDepartamento = :id_departamento ");

		query.setParameter("estado", estado);
		query.setParameter("id_departamento", id_departamento);
		
		List<Provincia> l = query.getResultList();		
		
		for ( int i=0; i < l.size(); i++ ) {
			
			Provincia entidadProvincia = (Provincia)l.get(i);	
			
			ProvinciaDTO objeto_provincia = new ProvinciaDTO();
			objeto_provincia.setIdProvincia(entidadProvincia.getIdProvincia());
			objeto_provincia.setNombre(entidadProvincia.getNombre());
			objeto_provincia.setDepartamento_idDepartamento(entidadProvincia.getDepartamento_idDepartamento());
		
			lista_provincias.add( objeto_provincia );
		}

		em.close();

		return lista_provincias;
	}

@SuppressWarnings("unchecked")
public ProvinciaDTO obtener_provincia(String id){
		
		EntityManager em = JPAUtilSingleton.
		getInstance().getEmf().createEntityManager();
		
	
		javax.persistence.Query query = em.createQuery("SELECT p FROM Provincia p WHERE p.IdProvincia = :id ");

		query.setParameter("id", id);
	
		ProvinciaDTO objeto_provincia = null;
		List<Provincia> l = query.getResultList();		
		
		for ( int i=0; i < l.size(); i++ ) {
			
			Provincia entidadProvincia = (Provincia)l.get(i);	
			
			objeto_provincia = new ProvinciaDTO();
			objeto_provincia.setIdProvincia(entidadProvincia.getIdProvincia());
			objeto_provincia.setNombre(entidadProvincia.getNombre());
			objeto_provincia.setDepartamento_idDepartamento(entidadProvincia.getDepartamento_idDepartamento());
		
			
		}

		em.close();

		return objeto_provincia;
	}

@SuppressWarnings("unchecked")
public List<DistritoDTO> lista_distritos(String id_provincia,int estado){
		
		EntityManager em = JPAUtilSingleton.
		getInstance().getEmf().createEntityManager();
		
		List<DistritoDTO> lista_distritos = new ArrayList<DistritoDTO>();
		 
		javax.persistence.Query query = em.createQuery("SELECT d FROM Distrito d WHERE d.estado = :estado and d.provincia_IdProvincia = :id_provincia ");

		query.setParameter("estado", estado);
		query.setParameter("id_provincia", id_provincia);
		
		List<Distrito> l = query.getResultList();		
		
		for ( int i=0; i < l.size(); i++ ) {
			
			Distrito entidadDistrito = (Distrito)l.get(i);
			
			DistritoDTO objeto_distrito = new DistritoDTO();
			objeto_distrito.setIdDistrito(entidadDistrito.getIdDistrito());
			objeto_distrito.setNombre(entidadDistrito.getNombre());
			objeto_distrito.setProvincia_IdProvincia(entidadDistrito.getProvincia_IdProvincia());		
			
			lista_distritos.add( objeto_distrito );
			
		}

		em.close();

		return lista_distritos;
	}





public List<DistritoDTO> auto_complete_list(String palabra_filtro,int estado){
	
	EntityManager em = JPAUtilSingleton.
	getInstance().getEmf().createEntityManager();
	
	List<DistritoDTO> lista_distritos = new ArrayList<DistritoDTO>();
	 
	javax.persistence.Query query = em.createQuery("SELECT d FROM Distrito d WHERE d.estado = :estado");

	query.setParameter("estado", estado);

	
	List<Distrito> l = query.getResultList();		
	
	for ( int i=0; i < l.size(); i++ ) {
		
		Distrito entidadDistrito = (Distrito)l.get(i);
		
		DistritoDTO objeto_distrito = new DistritoDTO();
		objeto_distrito.setIdDistrito(entidadDistrito.getIdDistrito());
		objeto_distrito.setNombre(entidadDistrito.getNombre());
		objeto_distrito.setProvincia_IdProvincia(entidadDistrito.getProvincia_IdProvincia());		
		objeto_distrito.setNombre_provincia(obtener_provincia(objeto_distrito.getProvincia_IdProvincia()).getNombre());

		if(ContienePalabra(palabra_filtro.toLowerCase(),objeto_distrito.getNombre().toLowerCase() )){
			lista_distritos.add( objeto_distrito );
		}
		
	}

	em.close();
	return lista_distritos;
}



public DistritoDTO nombre_distrito(String id){	
	EntityManager em = JPAUtilSingleton.
	getInstance().getEmf().createEntityManager();	 
	javax.persistence.Query query = em.createQuery("SELECT d FROM Distrito d WHERE d.IdDistrito = :id");
	query.setParameter("id", id);	
	List<Distrito> l = query.getResultList();			
    Distrito entidadDistrito = (Distrito)l.get(0);	
    DistritoDTO objeto_distrito = new DistritoDTO();
	objeto_distrito.setIdDistrito(entidadDistrito.getIdDistrito());
	objeto_distrito.setNombre(entidadDistrito.getNombre());
	objeto_distrito.setProvincia_IdProvincia(entidadDistrito.getProvincia_IdProvincia());		
	objeto_distrito.setNombre_provincia(obtener_provincia(objeto_distrito.getProvincia_IdProvincia()).getNombre());		
	em.close();
	return objeto_distrito;
}

public ProvinciaDTO nombre_provincia(String id){	
	EntityManager em = JPAUtilSingleton.
	getInstance().getEmf().createEntityManager(); 
	javax.persistence.Query query = em.createQuery("SELECT p FROM Provincia p WHERE p.IdProvincia = :id");
	query.setParameter("id", id);	
	List<Provincia> l = query.getResultList();			
	Provincia entidadDistrito = (Provincia)l.get(0);	
	ProvinciaDTO objeto_provincia = new ProvinciaDTO();
	objeto_provincia.setIdProvincia(entidadDistrito.getIdProvincia());
	objeto_provincia.setNombre(entidadDistrito.getNombre());
	objeto_provincia.setDepartamento_idDepartamento(entidadDistrito.getDepartamento_idDepartamento());
	em.close();
	return objeto_provincia;
}

public DepartamentoDTO nombre_departamento(String id){	
	EntityManager em = JPAUtilSingleton.
	getInstance().getEmf().createEntityManager();	
	
	javax.persistence.Query query = em.createQuery("SELECT d FROM Departamento d WHERE d.IdDepartamento = :id");
	query.setParameter("id", id);	
	List<Departamento> l = query.getResultList();			
	Departamento entidadDepartamento = (Departamento)l.get(0);	
    DepartamentoDTO objeto_departamento = new DepartamentoDTO();
    objeto_departamento.setIdDepartamento(entidadDepartamento.getIdDepartamento());
	objeto_departamento.setNombre(entidadDepartamento.getNombre());
	em.close();
	return objeto_departamento;
}


boolean ContienePalabra (String i, String j) {
	String	 cad=i.toLowerCase();
	char	  p1=cad.charAt(0);
	int		  l1=cad.length();
	return j.regionMatches(true, j.indexOf(p1),cad,0,l1 );
}	

	
	


}
